<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>


<script>
    function Parent() {
        this.a = 1;
        this.b = [1, 2, this.a];
        this.c = { demo: 5 };
        this.show = function () {
            console.log(this.a , this.b , this.c.demo );
        }
    }
    function Child() {
        this.a = 2;
        this.change = function () {
            this.b.push(this.a);
            this.a = this.b.length;
            this.c.demo = this.a++;
        }
    }
    var parent1 = new Parent()
    console.log(parent1)
    Child.prototype = parent1;
    var parent = new Parent();
    var child1 = new Child();
    var child2 = new Child();
    child1.a = 11;
    child2.a = 12;
    parent.show(); //? 1 [1,2,1] 5
    child1.show(); //? 11 [1,2,1] 5 没有show往上找 找到执行 因为这个函数时child1执行的 所以里面this.a = 11 this.b仍需要往上找 而上面的this.b里有this.a 已经在new的阶段赋值了
    child2.show(); //? 12 [1,2,1] 5
    child1.change(); //? 往原型上的b上push自己的a值 自己的a变为长度4 c变为4 然后a++变为5
    child2.change();//? 往原型上的b上push自己的a值 自己的a变为长度5 c变为5 然后a++变为6
    parent.show(); //? 1 [1,2,1] 5 这个是新实例 不影响
    child1.show(); //? 5 [1,2,3,11,12] 5
    child2.show(); //? 6 [1,2,3,11,12] 5
</script>
</body>
</html>
